﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Castle.MonoRail.Framework;
using CoopSaude.DAO;
using CoopSaude.SCEMReference;

namespace CoopSaude.Controllers
{
    [ControllerDetails(Area = "Estoque")]
    [DefaultAction("Listar")]
    public class EquipamentosController : BaseController
    {
        #region Actions

        public void Listar()
        {
            try
            {
                PropertyBag["listaEquipamentos"] = ScemDAO.listarEquipamentos(1, 1000, false);
            }
            catch (Exception ex)
            {
                Flash["erro"] = "Ocorreu um erro ao acessar o serviço";
            }

            this.MenuUtilizado = "estoque";
            this.SecaoUtilizada = "equipamentos";
            this.AcaoUtilizada = "listar";

        }

        public void Adicionar()
        {
            PropertyBag["equipamento_codigo"] = Params["equipamento_codigo"];
            PropertyBag["equipamento_nome"] = Params["equipamento_nome"];
            PropertyBag["equipamento_descricao"] = Params["equipamento_descricao"];
            PropertyBag["equipamento_preco"] = Params["equipamento_preco"];
            PropertyBag["equipamento_datacompra"] = Params["equipamento_datacompra"];
            PropertyBag["equipamento_periodogarantiadias"] = Params["equipamento_periodogarantiadias"];
            try
            {
                PropertyBag["listaFornecedores"] = ScemDAO.listarFornecedores(1, 1000, false);
                PropertyBag["lista_fisioterapia"] = ScemDAO.listarFisioterapia();
            }
            catch (Exception ex)
            {
                Flash["erro"] = "Ecorreu um erro ao obter or tipos de fisioterapias.";
                RedirectToAction("listar");
            }
            this.MenuUtilizado = "estoque";
            this.SecaoUtilizada = "equipamentos";
            this.AcaoUtilizada = "adicionar";
        }

        public void Criar()
        {
            this.MenuUtilizado = "estoque";
            this.SecaoUtilizada = "equipamentos";
            this.AcaoUtilizada = "adicionar";
            try
            {
                PropertyBag["lista_fisioterapia"] = ScemDAO.listarFisioterapia();
                PropertyBag["listaFornecedores"] = ScemDAO.listarFornecedores(1, 1000, false);

                if (Params["equipamento_codigo"].ToString().Equals("") ||
                    Params["equipamento_nome"].ToString().Equals("") ||
                    Params["equipamento_fornecedor"].ToString().Equals("") 
                    )
                {

                    Flash["erro"] = "Preencha todos os campos obrigatórios";
                    RenderView("adicionar");
                }
                else
                {
                    EquipamentoDTO equip = new EquipamentoDTO();
                    equip.Codigo = Params["equipamento_codigo"].ToString().Trim();
                    equip.Nome = Params["equipamento_nome"].ToString().Trim();
                    equip.Descricao = Params["equipamento_descricao"].ToString().Trim();
                    equip.TipoFisioterapiaId = Params["equipamento_tipofisioterapia"].ToString().Trim();
                    equip.FornecedorId = Params["equipamento_fornecedor"].ToString().Trim();

                    int equipPreco;
                    if (!int.TryParse(Params["equipamento_preco"], out equipPreco))
                        Flash["erro"] = "Preencha o preço apenas com números";
                    else
                        equip.Preco = equipPreco;
                    
                    DateTime equipDataCompra;
                    if (!DateTime.TryParse(Params["equipamento_datacompra"], out equipDataCompra))
                        Flash["erro"] = "Formato incorreto da data de compra";
                    else
                        equip.DataCompra = equipDataCompra;

                    int equipPeriodoGarantiaDias;
                    if (!int.TryParse(Params["equipamento_periodogarantiadias"], out equipPeriodoGarantiaDias))
                        Flash["erro"] = "Formato incorreto do período de garantia";
                    else
                        equip.PeriodoGarantiaDias = equipPeriodoGarantiaDias;

                    equip = ScemDAO.adicionarEquipamento(equip);
                    Flash["sucesso"] = "Equipamento adicionado com sucesso";
                    RedirectToAction("listar");
                }
            }
            catch (Exception ex)
            {

                Flash["erro"] = "Ecorreu um erro ao salvar o equipamento durante a conexão com o banco de dados.";
                RenderView("adicionar");
            }
        }

        public void Editar()
        {
            try
            {

                EquipamentoDTO equipamento = ScemDAO.obterEquipamento(Params["idEquipamento"]);
                PropertyBag["equipamento_codigo"] = equipamento.Codigo;
                PropertyBag["equipamento_nome"] = equipamento.Nome;
                PropertyBag["equipamento_descricao"] = equipamento.Descricao;
                PropertyBag["equipamento_preco"] = equipamento.Preco;
                PropertyBag["equipamento_datacompra"] = equipamento.DataCompra;
                PropertyBag["equipamento_periodogarantiadias"] = equipamento.PeriodoGarantiaDias;
                PropertyBag["equipamento_id"] = equipamento.Id;
                PropertyBag["equipamento_tipofisioterapia"] = equipamento.TipoFisioterapiaId;
                PropertyBag["equipamento_fornecedor"] = equipamento.FornecedorId;

                try
                {
                    PropertyBag["listaFornecedores"] = ScemDAO.listarFornecedores(1, 1000, false);
                    PropertyBag["lista_fisioterapia"] = ScemDAO.listarFisioterapia();
                }
                catch (Exception ex)
                {
                    Flash["erro"] = "Ecorreu um erro ao obter or tipos de fisioterapias.";
                    RedirectToAction("listar");
                }

                this.MenuUtilizado = "estoque";
                this.SecaoUtilizada = "equipamentos";
                this.AcaoUtilizada = "editar";
            }
            catch (Exception ex)
            {

                Flash["erro"] = "Ecorreu um erro ao recuperar o produto";
                RedirectToAction("listar");
            }
        }

        public void Atualizar()
        {
            this.MenuUtilizado = "estoque";
            this.SecaoUtilizada = "equipamentos";
            this.AcaoUtilizada = "adicionar";
            try
            {
                PropertyBag["lista_fisioterapia"] = ScemDAO.listarFisioterapia();
                PropertyBag["listaFornecedores"] = ScemDAO.listarFornecedores(1, 1000, false);

                if (Params["equipamento_codigo"].ToString().Equals("") ||
                    Params["equipamento_nome"].ToString().Equals("") ||
                    Params["equipamento_fornecedor"].ToString().Equals("")
                    )
                {

                    Flash["erro"] = "Preencha todos os campos obrigatórios";
                    RenderView("adicionar");
                }
                else
                {
                    EquipamentoDTO equip = ScemDAO.obterEquipamento(Params["equipamento_id"]);
                    equip.Codigo = Params["equipamento_codigo"].ToString().Trim();
                    equip.Nome = Params["equipamento_nome"].ToString().Trim();
                    equip.Descricao = Params["equipamento_descricao"].ToString().Trim();
                    equip.TipoFisioterapiaId = Params["equipamento_tipofisioterapia"].ToString().Trim();
                    equip.FornecedorId = Params["equipamento_fornecedor"].ToString().Trim();

                    int equipPreco;
                    if (!int.TryParse(Params["equipamento_preco"], out equipPreco))
                        Flash["erro"] = "Preencha o preço apenas com números";
                    else
                        equip.Preco = equipPreco;

                    DateTime equipDataCompra;
                    if (!DateTime.TryParse(Params["equipamento_datacompra"], out equipDataCompra))
                        Flash["erro"] = "Formato incorreto da data de compra";
                    else
                        equip.DataCompra = equipDataCompra;

                    int equipPeriodoGarantiaDias;
                    if (!int.TryParse(Params["equipamento_periodogarantiadias"], out equipPeriodoGarantiaDias))
                        Flash["erro"] = "Formato incorreto do período de garantia";
                    else
                        equip.PeriodoGarantiaDias = equipPeriodoGarantiaDias;

                    equip = ScemDAO.atualizarEquipamento(equip);
                    Flash["sucesso"] = "Equipamento editado com sucesso";
                    RedirectToAction("listar");
                }
            }
            catch (Exception ex)
            {

                Flash["erro"] = "Ecorreu um erro ao salvar o equipamento durante a conexão com o banco de dados.";
                RenderView("editar");
            }
        }

        public void Detalhes()
        {
            try
            {
                EquipamentoDTO equipamento = ScemDAO.obterEquipamento(Params["idEquipamento"]);
                PropertyBag["equipamento_codigo"] = equipamento.Codigo;
                PropertyBag["equipamento_nome"] = equipamento.Nome;
                PropertyBag["equipamento_descricao"] = equipamento.Descricao;
                PropertyBag["equipamento_preco"] = equipamento.Preco;
                PropertyBag["equipamento_datacompra"] = equipamento.DataCompra;
                PropertyBag["equipamento_periodogarantiadias"] = equipamento.PeriodoGarantiaDias;
                PropertyBag["equipamento_id"] = equipamento.Id;
                PropertyBag["equipamento_tipofisioterapia"] = equipamento.TipoFisioterapiaId;
                PropertyBag["equipamento_fornecedor"] = equipamento.FornecedorId;
                PropertyBag["lista_fisioterapia"] = ScemDAO.listarFisioterapia();
                PropertyBag["listaFornecedores"] = ScemDAO.listarFornecedores(1, 1000, false);

                this.MenuUtilizado = "estoque";
                this.SecaoUtilizada = "equipamentos";
                this.AcaoUtilizada = "detalhes";
            }
            catch (Exception ex)
            {
                Flash["erro"] = "Ecorreu um erro ao recuperar o equipamento";
                RedirectToAction("listar");
            }
        }

        public void Desativar()
        {
            try
            {
                ScemDAO.desativarEquipamento(Params["idEquipamento"].ToString());
                Flash["sucesso"] = "Equipamento desativado com sucesso.";
                RedirectToAction("listar");
            }
            catch (Exception ex)
            {

                Flash["erro"] = "Ocorreu um erro ao excluir o produto durante a conexão com o banco de dados.";
                RedirectToAction("listar");
            }
        }
        #endregion
    }
}